Belirli Bir Adresin Geçmiş Portfolyo Değerlerini Alma
Bir diğer fonksiyon olan portfolyo yani hesap geçmişi alınırken ilk fonksiyona benzer olarak kütüphaneler başlangıçta eklenir. Ancak eğer öncesinde bu kütüphane eklendiyse yeniden eklemenin gerekliliği bulunmamaktadır.
import requests
Tablo 35
Tablo 35'de eklenilen "request" kütüphanesi, http isteklerinin çıktı olarak verilmesini sağlamaktadır. Python içerisinden sorgu yapılırken ilk olarak URL yapısı oluşturulur ve bu URL yapısı http sorgusu halinde belirtilen kütüphane içerisinde geçirildikten sonra istenilen çıktıyı verir.
def GeçmişPörtfolyoDeğeriAl(ApiAnahtarı, Zincir\_Numarası,Adres,Fiat): URL = "https://api.covalenthq.com" + "/v1/" + Zincir\_Numarası + "/address/" + Adres + "/portfolio\_v2/"+ "?quote-currency=" + Fiat + "&key=" + ApiAnahtarı
Tablo 36
Tablo 36'da görüldüğü üzere "def" komutu ile fonksiyon tanıtılır. Fonksiyonun bünyesinde 4 adet parametre bulunmaktadır. Bu parametreler:
- ApiAnahtarı: Kayıt olunurken alınan kimlik anahtarıdır. Sorguları yaparken yapan kişiyi belirtmek için kullanılır.
- Zincir_Numarası: İçerisinden veri alınmak istenen blok zinciri ifade eder. Hangi zincirin hangi numaraya ait olduğu öncesinde belirtilmiştir.
- Adres: Hesap geçmişi alınacak adresi belirtir. EtherScan gibi sitelerden elde edilebilir.
- Fiat: Fiyatların çevrileceği kur olmaktadır. Seçilen kurun fiyatına göre değerler belirlenir ve çıktı verir.
Seçilen parametreler URL değişkeni içerisinde string toplama yöntemi ile eklenmekte ve sorguya göndermeye hazır olmaktadır.
istek = requests.get(URL) verim = istek.json()
Tablo 37
Tablo 37'de sırayla ilk olarak öncesinde kütüphane olarak eklenen request kütüphanesinden "get" metodu "URL" değişkeni içerisine parametre girerek çağırılır ve "istek" adında bir değişkene kaydedilir. Devamında istek olarak kaydedilen bu değişken ".json" metodu ile json halinde okunarak "verim" değişkeni adıyla kaydedilir.
Adresim = verim["address"] SonGüncelleme = verim["updated\_at"] BirSonrakiGüncelleme = verim["next\_update\_at"] ParaBirimi = verim["quote\_currency"] ZincirId = verim["chain\_id"] items = verim["items"]
Tablo 38
Tablo 38'de verildiği üzere "verim" değişkeni ile kaydedilen json verisi uygun anahtarlar kullanarak sınıflandırılır. Sınıflandırılma yapılırken kaydedilen veriler şu şekildedir:
- Adresim: İçerisine erişilen adresin kendisi olmaktadır. "address" anahtarı ile veri içerisinden erişilir.
- SonGüncelleme: Adres üzerinde yapılan son güncellemeyi belirtmektedir. "updated_at" anahtarı ile erişilmektedir.
- BirSonrakiGüncelleme: Adres üzerinde gerçekleşmesi planlanan bir sonraki güncellemeyi ifade etmektedir. Veri içerisinden "next_update_at" anahtarı ile erişilmektedir.
- ParaBirimi: Alınan veri içerisindeki kurların çevrileceği birimi belirtmektedir. Parametre olarak kullanıcı tarafından girilmektedir. "quote_currency" anahtarı ile erişilir.
- ZincirId: Alınan verinin hangi blok zincir içerisinde olduğunu belirtmektedir. Parametre olarak kullanıcı tarafından girilmektedir. Veri içerisinden "chain_id" anahtarı ile erişilmektedir.
- İtems: Alınan verinin ana içeriğini içeren anahtardır. İçerisinde Geçmiş Portfolyo değerlerini barındırmaktadır. Devamında "for" döngüsü ile içerisinden veri anlamlandırılacaktır. Veri içerisinden "items" anahtarı ile erişilir.
liste = [] liste.append("Adresim: " + Adresim) liste.append("Son Güncelleme: " + SonGüncelleme) liste.append("Bir sonraki Güncelleme: " + BirSonrakiGüncelleme) liste.append("Para Birimi: " + ParaBirimi) liste.append("Zincir Id: " + str(ZincirId))
Tablo 39
Tablo 39'da ilk olarak "liste" adında boş bir liste oluşturulur. Bu listeye sonrasında çıktı olarak istenilecek veriler kaydedilmektedir. Alt kısmında oluşturulan her bir değişkenin kendine özgü adlandırmalar ile listeye eklendiği gözlenmektedir. Bu işlemler yapılırken adlandırmalar string ekleme metodu ile yapılmaktadır. Bu nedenle string formatında olmayan verilerin önce "str" fonksiyonu ile string haline getirilip sonrasında işleme sokulması gerekmektedir.
index = 1 for item in items:
Tablo 40
Tablo 40'da "for" döngüsü ile karşılaşılmaktadır. Bu döngünün öncesinde "index" adında bir integer tanımlanmaktadır. Bu integer'ın amacı listedeki değişimleri farklı şekillerde numaralandırarak daha kolay bir anlayış sağlamaktır. Öncesinde tanımladığımız "items" değişkeni içerisinde "for" döngüsü uygulayarak her bir eleman için istenilen işlemleri gerçekleştiririz.
KontratOndalığı =["Index Numarası: " + str(index),"Kontrat Ondalığı: " + str(item["contract\_decimals"])]
KontratAdı = ["Index Numarası: " + str(index),"Kontrat Adı: " + str(item["contract\_name"])]
KontratSembolü = ["Index Numarası: " + str(index), "Kontrat Sembolü: " + str(item["contract\_ticker\_symbol"])]
KontratAdresi = ["Index Numarası: " + str(index),"Kontrat Adresi: " + str(item["contract\_address"])]
DesteklenenERC = ["Index Numarası: " + str(index),"DesteklenenERC: " + str(item["supports\_erc"])]
LogoURL = ["Index Numarası: " + str(index), "Logo URL: " + str(item["logo\_url"])]
Tablo 41
Tablo 41'de görüldüğü üzere döngü değişkeninin tanımlanmasından sonra bu döngünün içerisindeki ortak veriler uygun değişkene kaydedilmektedir. Bu değişkenlere kaydedilirken her biri öncelikle Index Numarası ile etiketlendirilmektedir. Bu durumun nedeni döngü içerisinde birden farklı ağlarda veri kaydedilmesi halinde bu verinin birbiri ile karışmamasıdır. Uygun Index eklendikten sonra veriye uygun başlık da eklenerek 2 elemanlık bir liste halinde değişkene kaydedilmektedir. Değişkenlere bakılacak olunursa:
- KontratOndalığı: Kontratın ondalık olarak okunurken kaç virgül atılması gerektiğini göstermektedir. İtemler içerisinden "contract_address" anahtarı ile erişilmektedir.
- KontratAdı: Kontrat adı hangi kontrat üzerinden veri sorguladığımızı belirtmektedir. İtems değişkeni içerisindeki her bir item'i farklı bir kontrat oluşturmaktadır. İtemler içerisinden "contract_name" anahtarı ile erişilmektedir.
- KontratSembolü: İçerisinde bulunulan kontratın sembolünü çıktı olarak vermektedir. Birim olarak da kullanılabilmektedir (ETH, TR, BTC). İtemler içerinden "contract_ticker_symbol" anahtarı ile erişilmektedir.
- KontratAdresi: Kontratın kayıtlı olduğu adresi işaret etmektedir. İtemler içerisinden "contract_address" anahtarı ile erişilmektedir.
- DesteklenenERC: Kontratın ERC teknolojilerinin hangilerini desteklediğini belirtmektedir. İtemler içerisinden "supports_erc" anahtarı ile erişilebilmektedir.
- LogoURL: Kontratın logosunu URL adresini çıktı olarak vermektedir. Her bir kontratın kendini temsil eden logoları bulunmaktadır. İtems içerisinden "logo_url" anahtarı ile erişilebilmektedir.
liste.append(KontratOndalığı) liste.append(KontratAdı) liste.append(KontratSembolü) liste.append(KontratAdresi) liste.append(DesteklenenERC) liste.append(LogoURL)
Tablo 42
Tablo 42'de uygun şekilde string toplama ile kaydedilen değişkenler döngü içerisinde "append" metodu kullanılarak liste içerisine kaydedilmektedir.
for varlık in item["holdings"]:
Tablo 43
Şu ana kadar yapılanlar bakiye görüntüleme fonksiyonuna benzer olsa da asıl fonksiyon verisi varlıklar olarak da çevirebileceğimiz "holdings" anahtarı içerisinde liste halinde bulunmaktadır. Bu nedenle ikinci bir Tablo 43'de for döngüsü ile içerlerinde bulunan her bir dijital varlık için işlemler gerçekleştirebilmektedir.
Tarih = ["Index Numarası: " + str(index),KontratSembolü[1], "Tarih: " + str(varlık["timestamp"])]
KurOranı = ["Index Numarası: " + str(index),KontratSembolü[1], "KurOranı: " + str(varlık["quote\_rate"])]
AçılışFiyatındakiMiktar = ["Index Numarası: " + str(index),KontratSembolü[1], "Açılış Fiyatındaki Miktar: "+str(varlık["open"]["balance"])]
AçılışFiyatındakiKur = ["Index Numarası: " + str(index),KontratSembolü[1], "Açılış Fiyatındaki Kur: "+str(varlık["open"]["quote"])]
MaksimumFiyatındakiMiktar = ["Index Numarası: " + str(index), KontratSembolü[1], "Maksimum Fiyatındaki Miktar: "+str(varlık["high"]["balance"])]
MaksimumFiyatındakiKur = ["Index Numarası: " + str(index), KontratSembolü[1], "Maksimum Fiyatındaki Kur: "+str(varlık["high"]["quote"])]
MinumumFiyattakiMiktar = ["Index Numarası: " + str(index), KontratSembolü[1], "Minimum Fiyattaki Miktar: "+str(varlık["low"]["balance"])]
MinumumFiyattakiKur = ["Index Numarası: " + str(index), KontratSembolü[1], "Minimum Fiyattaki Kur: "+str(varlık["low"]["quote"])]
KapamışFiyatındakiMiktar = ["Index Numarası: " + str(index), KontratSembolü[1], "Kapamış Fiyatındaki Miktar: "+str(varlık["close"]["balance"])]
KapamışFiyatındakiKur = ["Index Numarası: " + str(index), KontratSembolü[1], "Kapamış Fiyatındaki Kur: "+str(varlık["close"]["quote"])]
Tablo 44
Tablo 44'de görüldüğü üzere veriden elde edilecek asıl bilgiye bakıldığında ikinci bir isimlendirme gerektiği anlaşılmaktadır. Bunun nedeni her bir kontrat içerisinde farklı zamanlardaki değerlerin kullanıcıya döndürülmesi olmaktadır. Bu işlem gerçekleştirilirken Kontrat sembolü kullanılır. Bu sembol içeriği oluşturulan listeye eleman olarak eklenir. Başlıklara ayrıntılı bakılması gerekirse:
- Tarih: Kontrat içerisinde tutulan verinin ait olduğu zamanı ifade etmektedir. Varlıklar içerisinden "timestamp" anahtarı ile erişilmektedir.
- KurOranı: Belirtilen tarih içerisinde kullanıcı tarafından seçilen kur ile birimin kur oranını ifade etmektedir. Varlıklar içerisinden "quote_rate" anahtarı ile erişilmektedir.
- AçılışFiyatındakiMiktar: Belirtilen tarih içerisinde kurun açıldığı fiyattaki varlık miktarını belirtmektedir. Varlıklar içerisinden "["open"]["balance"]" ikili anahtarı ile erişilmektedir.
- AçılışFiyatındakiKur: Belirtilen tarih içerisinde kurun açılmış olduğu fiyatı belirtmektedir. Varlıklar içerisinden "["open"]["quote"]" ikili anahtarı ile erişilmektedir.
- MaksimumFiyatındakiMiktar: Belirtilen tarih içerisinde kurun maksimum fiyatına sahip varlık miktarını göstermektedir. Varlıklar içerisinden "["high"]["balance"]" ikili anahtarı ile erişilmektedir.
- MaksimumFiyatındakiKur: Belirtilen tarih içerisinde kurun maksimum fiyatını belirtmektedir. Varlıklar içerisinden "["high"]["quote"]" ikili anahtarı ile erişilebilmektedir.
- MinumumFiyattakiMiktar: Belirtilen tarih içerisinde kurun minimum fiyata sahip varlık miktarını belirtmektedir. Varlıklar içerisinden "["low"]["balance"]" ikili anahtarı ile erişilmektedir.
- MinumumFiyattakiKur: Belirtilen tarih içerisinde kurun minimum fiyatını belirtmektedir. Varlıklar içerisinden "["low"]["quote"]" ikili anahtarı ile erişilebilmektedir.
- KapamışFiyatındakiMiktar: Belirtilen tarih içerisinde kurun kapanırken sahip olduğu ücretteki varlık miktarını belirtmektedir. Varlıklar içerisinden "["close"]["balance"]" ikili anahtarı ile erişilmektedir.
- KapamışFiyatındakiKur: Belirtilen tarih içerisinde kurun kapanırken sahip olduğu ücreti belirmektedir. Varlıklar içerisinden "["close"]["quote"]" ikili anahtarı ile erişilmektedirler.
liste.append(Tarih) liste.append(KurOranı) liste.append(AçılışFiyatındakiMiktar) liste.append(AçılışFiyatındakiKur) liste.append(MaksimumFiyatındakiMiktar) liste.append(MaksimumFiyatındakiKur) liste.append(MinumumFiyattakiMiktar) liste.append(MinumumFiyattakiKur) liste.append(KapamışFiyatındakiMiktar) liste.append(KapamışFiyatındakiKur)
Tablo 45
Tablo 45'de varlıklar döngüsü içerisinde her bir değişken liste içerisine uygun index ve Kontrat sembolü ile sınıflandırılarak kaydedilir.
index += 1
Tablo 46
Tablo 46'da verildiği üzere varlıklara döngüsünden çıkılması sonrasında index değeri bir arttırılarak itemler döngüsünün en başına yeniden dönülerek işlemler tekrarlanır.
for i in liste: print(i) return liste
Tablo 47
Tablo 47'de iki döngüden çıkılması ve mümkün olan tüm verilerin alınma durumundan sonrasında liste içerisine kaydedilen her bir veri kısa bir for döngüsü ile ekrana yazdırılıp "return" metodu ile fonksiyon çıktısı haline gelir.
def GeçmişPörtfolyoDeğeriAl(ApiAnahtarı, Zincir\_Numarası,Adres,Fiat): URL = "https://api.covalenthq.com" + "/v1/" + Zincir\_Numarası + "/address/" + Adres + "/portfolio\_v2/"+ "?quote-currency=" + Fiat + "&key=" + ApiAnahtarı istek = requests.get(URL) verim = (istek.json()) Adresim = verim["address"] SonGüncelleme = verim["updated\_at"] BirSonrakiGüncelleme = verim["next\_update\_at"] ParaBirimi = verim["quote\_currency"] ZincirId = verim["chain\_id"] items = verim["items"] liste = [] liste.append("Adresim: " + Adresim) liste.append("Son Güncelleme: " + SonGüncelleme) liste.append("Bir sonraki Güncelleme: " + BirSonrakiGüncelleme) liste.append("Para Birimi: " + ParaBirimi) liste.append("Zincir Id: " + str(ZincirId)) index = 1 for item in items: KontratOndalığı =["Index Numarası: " + str(index),"Kontrat Ondalığı: " + str(item["contract\_decimals"])] KontratAdı = ["Index Numarası: " + str(index),"Kontrat Adı: " + str(item["contract\_name"])] KontratSembolü = ["Index Numarası: " + str(index), "Kontrat Sembolü: " + str(item["contract\_ticker\_symbol"])] KontratAdresi = ["Index Numarası: " + str(index),"Kontrat Adresi: " + str(item["contract\_address"])] DesteklenenERC = ["Index Numarası: " + str(index),"DesteklenenERC: " + str(item["supports\_erc"])] LogoURL = ["Index Numarası: " + str(index), "Logo URL: " + str(item["logo\_url"])] liste.append(KontratOndalığı) liste.append(KontratAdı) liste.append(KontratSembolü) liste.append(KontratAdresi) liste.append(DesteklenenERC) liste.append(LogoURL) for varlık in item["holdings"]: Tarih = ["Index Numarası: " + str(index),KontratSembolü[1], "Tarih: " + str(varlık["timestamp"])] KurOranı = ["Index Numarası: " + str(index),KontratSembolü[1], "KurOranı: " + str(varlık["quote\_rate"])] AçılışFiyatındakiMiktar = ["Index Numarası: " + str(index),KontratSembolü[1], "Açılış Fiyatındaki Miktar: "+str(varlık["open"]["balance"])] AçılışFiyatındakiKur = ["Index Numarası: " + str(index),KontratSembolü[1], "Açılış Fiyatındaki Kur: "+str(varlık["open"]["quote"])] MaksimumFiyatındakiMiktar = ["Index Numarası: " + str(index), KontratSembolü[1], "Maksimum Fiyatındaki Miktar: "+str(varlık["high"]["balance"])] MaksimumFiyatındakiKur = ["Index Numarası: " + str(index), KontratSembolü[1], "Maksimum Fiyatındaki Kur: "+str(varlık["high"]["quote"])] MinumumFiyattakiMiktar = ["Index Numarası: " + str(index), KontratSembolü[1], "Minimum Fiyattaki Miktar: "+str(varlık["low"]["balance"])] MinumumFiyattakiKur = ["Index Numarası: " + str(index), KontratSembolü[1], "Minimum Fiyattaki Kur: "+str(varlık["low"]["quote"])] KapamışFiyatındakiMiktar = ["Index Numarası: " + str(index), KontratSembolü[1], "Kapamış Fiyatındaki Miktar: "+str(varlık["close"]["balance"])] KapamışFiyatındakiKur = ["Index Numarası: " + str(index), KontratSembolü[1], "Kapamış Fiyatındaki Kur: "+str(varlık["close"]["quote"])] liste.append(Tarih) liste.append(KurOranı) liste.append(AçılışFiyatındakiMiktar) liste.append(AçılışFiyatındakiKur) liste.append(MaksimumFiyatındakiMiktar) liste.append(MaksimumFiyatındakiKur) liste.append(MinumumFiyattakiMiktar) liste.append(MinumumFiyattakiKur) liste.append(KapamışFiyatındakiMiktar) liste.append(KapamışFiyatındakiKur) index += 1 for i in liste: print(i) return liste
Tablo 48
Tablo 48'de kodun tamamı ifade edilmiştir. Kısaca veri http ile sorgu edilir parçalanır ve uygun başlıklar ile yeniden birleştirilip Türkçeleştirilerek kullanıma hazır hale getirilir.
Adresim: 0xc8d06c8a2f85b80851d26fb8105ac701a837b507 Son Güncelleme: 2021-07-07T07:59:20.121441410Z Bir sonraki Güncelleme: 2021-07-07T08:04:20.121445510Z Para Birimi: TRY Zincir Id: 1 ['Index Numarası: 1', 'Kontrat Ondalığı: 6'] ['Index Numarası: 1', 'Kontrat Adı: Tether USD'] ['Index Numarası: 1', 'Kontrat Sembolü: USDT'] ['Index Numarası: 1', 'Kontrat Adresi: 0xdac17f958d2ee523a2206206994597c13d831ec7'] ['Index Numarası: 1', 'DesteklenenERC: None'] ['Index Numarası: 1', 'Logo URL: https://logos.covalenthq.com/tokens/0xdac17f958d2ee523a2206206994597c13d831ec7.png'] ['Index Numarası: 1', 'Kontrat Sembolü: USDT', 'Tarih: 2021-07-07T00:00:00Z'] ['Index Numarası: 1', 'Kontrat Sembolü: USDT', 'KurOranı: 8.694729'] ['Index Numarası: 1', 'Kontrat Sembolü: USDT', 'Açılış Fiyatındaki Miktar: 3000000'] ['Index Numarası: 1', 'Kontrat Sembolü: USDT', 'Açılış Fiyatındaki Kur: 26.084187'] ['Index Numarası: 1', 'Kontrat Sembolü: USDT', 'Maksimum Fiyatındaki Miktar: 3000000'] ['Index Numarası: 1', 'Kontrat Sembolü: USDT', 'Maksimum Fiyatındaki Kur: 26.084187'] ['Index Numarası: 1', 'Kontrat Sembolü: USDT', 'Minimum Fiyattaki Miktar: 3000000'] ['Index Numarası: 1', 'Kontrat Sembolü: USDT', 'Minimum Fiyattaki Kur: 26.084187'] ['Index Numarası: 1', 'Kontrat Sembolü: USDT', 'Kapamış Fiyatındaki Miktar: 3000000'] ['Index Numarası: 1', 'Kontrat Sembolü: USDT', 'Kapamış Fiyatındaki Kur: 26.084187'] ………… ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Maksimum Fiyatındaki Kur: 0.0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Minimum Fiyattaki Miktar: 0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Minimum Fiyattaki Kur: 0.0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Kapamış Fiyatındaki Miktar: 0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Kapamış Fiyatındaki Kur: 0.0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Tarih: 2021-06-22T00:00:00Z'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'KurOranı: 28.95795'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Açılış Fiyatındaki Miktar: 0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Açılış Fiyatındaki Kur: 0.0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Maksimum Fiyatındaki Miktar: 0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Maksimum Fiyatındaki Kur: 0.0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Minimum Fiyattaki Miktar: 0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Minimum Fiyattaki Kur: 0.0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Kapamış Fiyatındaki Miktar: 0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Kapamış Fiyatındaki Kur: 0.0'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Tarih: 2021-06-21T00:00:00Z'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'KurOranı: 28.68406'] ['Index Numarası: 2', 'Kontrat Sembolü: pht', 'Açılış Fiyatındaki Miktar: 0']
Tablo 49
Tablo 59'da çağırılmış olan fonksiyonun örnek çıktısının bir kısmı verilmektedir. Bu veri doğru bir şekilde okunularak anlamlandırılabilir ve projelerde kullanılabilecektir.